<?php

class Admin_RoleController extends Zend_Controller_Action{
    public function init ()
    {
        $acl = new My_Acl();
        $auth = $acl->checkAllowed($this->_request);
    }
    public function indexAction()
    {
        $model_roles = new Admin_Model_Roles();
        $this->view->roles_list = $model_roles->getAllData();
    }
    public function addAction()
    {
        if($this->getRequest()->isPost()){
            $form_data = $this->getRequest()->getPost();
            if($form_data){
                // lấy dữ liệu user post về
                $role_projects = '';
                $role_resource = '';
                $role_views = '';
                if(isset($form_data['roleName']))
                    $role_name = $form_data['roleName'];
                if(isset($form_data['projects']))
                    $role_projects = $form_data['projects'];
                if(isset($form_data['resources']))
                    $role_resource = $form_data['resources'];
                if(isset($form_data['views']))
                    $role_views = $form_data['views'];
                
                if($role_name && ($role_projects || $role_resource)){
                    // kiểm tra tên role có hợp lệ không
                    $model_roles = new Admin_Model_Roles();
                    $role_check_name = $model_roles->getDataByName($role_name);
                    if(!$role_check_name){
                        $roleId = $model_roles->addData($role_name);
                        if($roleId){
                            // dữ liệu user post về server là mảng => convert thành json rồi insert vào csdl
                            $model_rolesoption          = new Admin_Model_Rolesoption();
                            $model_rolesoption->addData($roleId, json_encode($role_views), 1);
                            $model_rolesprivilege       = new Admin_Model_Rolesprivilege();
                            $model_rolesprivilege->addData($roleId, json_encode($role_resource), json_encode($role_projects));
                            $this->_helper->redirector('index', 'role', 'admin');
                        }else{
                            $this->view->mess = "Đã có lỗi sảy ra. Vui lòng thử lại!";
                        }
                    }else{
                        $this->view->mess = "Tên quyền đã tồn tại. Vui lòng chọn tên khác!";
                    }
                }else{
                    $this->view->mess = "Vui lòng điền đẩy đủ thông tin!";
                }
            }else{
                $this->_helper->redirector('index', 'role', 'admin');
            }
        }
        // mảng tất cả dự án
    	$model_project     = new Admin_Model_Project();
        $project_list      = $model_project->getAllData();
        $this->view->project_list = $project_list;
        
        // mảng tất cả resource
    	$model_resource    = new Admin_Model_Resource();
        $resource_list     = $model_resource->getAllData();
        $this->view->resource_list = $resource_list;
        
        // mảng tất cả config views
        $views_list = new Zend_Config_Ini(CONFIG_PATH . '/columns.ini', APPLICATION_ENV);
        $views_list = $views_list->views->toArray();
        $this->view->views_list = $views_list;   
        
    }
    public function editAction()
    {
        $roleId = (int)($this->_getParam('id', 0));
        $model_rolesoption          = new Admin_Model_Rolesoption();
        $model_rolesprivilege       = new Admin_Model_Rolesprivilege();
        $model_roles = new Admin_Model_Roles();
        $role_check = $model_roles->getDataByRoleId($roleId);
        $this->view->role_check = $role_check;
        if($role_check){
            if($this->getRequest()->isPost()){
                $form_data = $this->getRequest()->getPost();
                if($form_data){
                    // lấy dữ liệu user post về
                    $role_projects = '';
                    $role_resource = '';
                    $role_views = '';
                    if(isset($form_data['roleName']))
                        $role_name = $form_data['roleName'];
                    if(isset($form_data['projects']))
                        $role_projects = $form_data['projects'];
                    if(isset($form_data['resources']))
                        $role_resource = $form_data['resources'];
                    if(isset($form_data['views']))
                        $role_views = $form_data['views'];
                    
                    if($role_name && ($role_projects || $role_resource)){
                        // kiểm tra tên role có hợp lệ không
                        $role_check_name = $model_roles->getDataByName($role_name);
                        if(!$role_check_name || $role_check_name['id'] == $role_check['id']){
                            // dữ liệu user post về server là mảng => convert thành json rồi insert vào csdl
                            $model_roles->editData($roleId, $role_name);
                            $model_rolesoption->editData($roleId, json_encode($role_views), 1);
                            $model_rolesprivilege->editData($roleId, json_encode($role_resource), json_encode($role_projects));
                            
                            $this->_helper->redirector('index', 'role', 'admin');
                        }else{
                            $this->view->mess = "Tên quyền đã tồn tại. Vui lòng chọn tên khác!";
                        }
                    }else{
                        $this->view->mess = "Vui lòng điền đẩy đủ thông tin!";
                    }
                }else{
                    $this->_helper->redirector('index', 'role', 'admin');
                }
            }
            
            $role_option_views = $model_rolesoption->getRoleIdData($roleId)->toArray();
            $role_privilege = $model_rolesprivilege->getRoleIdData($roleId);
            // lấy option views, quyền (resource), và các dự án user có quyền trên đó
            
            $role_option    = array();
            $role_resource  = array();
            $role_project   = array();
            if(is_array(json_decode($role_option_views['views'])))
                $role_option    = json_decode($role_option_views['views']);
            if(is_array(json_decode($role_privilege['resourceId'])))
                $role_resource  = json_decode($role_privilege['resourceId']);
            if(is_array(json_decode($role_privilege['projectId'])))
                $role_project   = json_decode($role_privilege['projectId']);
                
            $this->view->role_option    = $role_option;
            $this->view->role_resource  = $role_resource;
            $this->view->role_project   = $role_project;
                                
            // mảng tất cả dự án
        	$model_project     = new Admin_Model_Project();
            $project_list      = $model_project->getAllData();
            $this->view->project_list = $project_list;
            
            // mảng tất cả resource
        	$model_resource    = new Admin_Model_Resource();
            $resource_list     = $model_resource->getAllData();
            $this->view->resource_list = $resource_list;
            
            // mảng tất cả config views
            $views_list = new Zend_Config_Ini(CONFIG_PATH . '/columns.ini', APPLICATION_ENV);
            $views_list = $views_list->views->toArray();
            $this->view->views_list = $views_list;   
        }else{
            $this->_helper->redirector('index', 'role', 'admin');
        }
    }
    public function deleteAction()
    {
        $id = (int)($this->_getParam('id', 0));
        $model_roles = new Admin_Model_Roles();
        $role_check = $model_roles->getDataByRoleId($id);
        $this->view->role = $role_check;
        if($role_check){
        	if($this->getRequest()->isPost())
        	{
                $model_rolesoption          = new Admin_Model_Rolesoption();
                $model_rolesprivilege       = new Admin_Model_Rolesprivilege();
                
                $roleId = $this->getRequest()->getPost('roleId');
                $model_roles->deleteDataByRoleId($roleId);
                $model_rolesoption->deleteDataByRoleId($roleId);
                $model_rolesprivilege->deleteDataByRoleId($roleId);
                $this->_helper->redirector('index', 'role', 'admin');
            }
        }
    }
}







